/**
 * 
 */
package structure;

import java.util.Stack;

/**
 * Bildet den Stack des PIC16 nach. 
 * Die Anzahl der Elemente ist auf 8 begrenzt.
 * Die Klasse kann nur einmal instanziiert werden (Singleton-Pattern).
 * @author Dorothee Kern und Patrick Lehmann
 *
 */
public class PICStack {

    private Stack<Integer> stack;
    private int stackCount;
    private static PICStack instance = null;

    /**
     * Der Konstruktor ist private -> Singleton
     */
    private PICStack() {
        stack = new Stack<Integer>();
        stackCount = 0;
    }

    /**
     * Die Methode stellt sicher, dass nur eine Instanz erzeugt werden kann.
     * @return Globaler Stack
     */
    public static PICStack getInstance() {
        if (instance == null) {
            instance = new PICStack();
        }
        return instance;
    }

    /**
     * Setzt ein Element auf den Top of Stack und erhöht den StackCount
     * @param item
     */
    public void push(int item) {
        if (stackCount < 8) {
            stack.push(item);
            stackCount++;
        }
    }

    /**
     * Gibt das oberste Element des Stack zurück.
     * @return Das oberste Element des Stack ausgeben.
     */
    public int pop() {
        stackCount--;
        return stack.pop();
    }

    /**
     * Erstellt eine Kopie des PICStacks.
     * @return Ein Klon dieses Stacks
     */
    @Override
    public Stack<Integer> clone() {
        return (Stack) stack.clone();
    }

    /**
     * Gibt an, ob der Stack leer ist.
     * @return True, wenn Stack leer.
     */
    public boolean isEmpty() {
        return stack.isEmpty();
    }
    /**
     * Löscht den Inhalt des Stacks.
     */
    public void clear() {
        stack.clear();
    }
}
